package br.edu.ufc.deti.util;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * Classe que tem como objetivo fornecer métodos para
 * ler e setar valores de arquivos de propriedades.
 * 
 * @since January 24, 2008.
 * @author Marcelo Henrique.
 */
public class ResourceUtils {

	
	/**
	 * Instância que será utilizada no Singleton.
	 */
	private static ResourceUtils instance = new ResourceUtils();
	
	/**
	 * Método construtor que teve a sua visibilidade
	 * reduzida para poder implementar o Singleton.
	 */
	private ResourceUtils() {}
	
	/**
	 * Método que pega uma instância do Singleton.
	 * @return Uma instância da classe atual.
	 */
	public static ResourceUtils getInstance() {
		return instance;
	}
	
	/**
	 * Método que pegará um valor para uma determinada chave
	 * em um arquivo passado como argumento.
	 * @param file Caminho para o arquivo que deve estar no classpath.
	 * @param key Propriedade no arquivo .properties.
	 * @return O valor atribuido a propriedade passada
	 * como parâmetro.
	 * @throws IOException.
	 */
	public String getProperty( String file, String key ) throws IOException {
		Properties prop = new Properties();
		prop.load( getClass().getResourceAsStream( file ) );
		String value = prop.getProperty( key );
		return value;
	}
	
	/**
	 * Método que setará um valor para uma propriedade
	 * passada como parâmetro.
	 * @param file Caminho para o arquivo que deve estar no classpath.
	 * @param key Propriedade no arquivo .properties.
	 * @param value Valor a ser setado no arquivo passado no argumento
	 * para a chave informada na assinatura do método.
	 * @return True caso a operação seja realizada com sucesso.
	 * @throws IOException.
	 */
	public boolean setProperty( String file, String key, String value ) throws IOException {
		Properties prop = new Properties();
		prop.load( getClass().getResourceAsStream( file ) );
		prop.setProperty( key, value );
		prop.store( new FileOutputStream( getClass().getResource( file ).toString().substring( 6 ).replaceAll( "%20", " " ) ), null );
		return true;
	}
}
